# 类装饰器
# 类装饰器主要依赖于函数__call__(),每当调用一个类的实例时,函数__call__()就会被执行一次

class ClassCallCount:
    # 构造函数
    def __init__(self, f):
        self.f = f  # 传入原函数f
        self.__call_count = 0  # 初始化调用计数

    # 重写__call__()函数,实现类装饰器
    def __call__(self, *args, **kwargs):
        # 调用计数+1
        self.__call_count += 1
        print(f'call count is: {self.__call_count}')

        # 执行原函数,返回结果
        return self.f(*args, **kwargs)


# 定义普通函数,并指定类装饰器
@ClassCallCount
def func():
    print('exec func')


if __name__ == '__main__':
    for i in range(0, 10):
        func()
